import * as utils from './utils.js'
/**
 * 连接WebSocket服务器
 */
function conn(){
	//连接WebSocket服务器
	uni.connectSocket({
		url: 'ws://' + utils.host + ':8888/im'
	});
	
	//几个回调方法
	uni.onSocketOpen((res) => {
		console.log('成功连接websocket服务器....');
		//进行注册...
		this.wsRegister();
	});
	
	//服务器连接断开
	uni.onSocketClose((res) => {
		console.log('WebSocket服务器连接断开....');
	});
	
	//监听服务器发送的消息
	uni.onSocketMessage((res) => {
		console.log('收到服务器内容：', res.data);
		var msgObj = JSON.parse(res.data);
		switch(msgObj.action) {
			case 101: 
				//将私聊消息转发给消息页面
				uni.$emit('messagelist', msgObj);
				//私聊消息，转发给聊天页面
				uni.$emit('messageget_' + msgObj.to + "_" + msgObj.from, msgObj);
				//缓存接收的消息
				this.setMsgCache(msgObj.to, msgObj.from, this.createShowMsg(msgObj.from, msgObj.msg, 1));
			break;
		}
	});
}

/**
 * 注册websocket消息 - 让服务器进行 uid 和 Channel 的绑定
 */
function wsRegister(){
	if(utils.isLogin()){
		//是否以及登录
		console.log("发送WebSocket的注册消息...");
		//发送注册消息
		//获取当前登录的用户id
		var uid = utils.getUserInfo().uid;
		//注册消息
		var msg = {
			action: 100,
			from: uid
		}
		//发送给WebSocket服务器
		this.sendWsMsg(msg);
	}
}

/**
 * @param {Object} obj发送WebSocket消息
 */
function sendWsMsg(obj){
	//发送消息
	uni.sendSocketMessage({
		//
		data: JSON.stringify(obj)
	});
}

/**
 * 生成需要展示出来的消息对象
 * from - 谁发的消息
 * content - 消息的内容
 * type - 1文本 2图片
 */
function createShowMsg(from, content, type){
	
	var fromUser = null;
	//判断消息的来源 我发出去的消息 还是 好友发给我的消息
	if(from == utils.getUserInfo().uid){
		//说明是我发出去的消息
		fromUser = utils.getUserInfo();
	} else {
		//说明是好友发给我的消息
		fromUser = uni.getStorageSync("friendsInfo_" + from)
	}

	
	//需要展示到聊天页面的消息对象
	var msg = {
		userId: from,
		msgId: new Date().getTime(),
		name: fromUser.nickname,
		message: type == 1 ? content : "",
		img: type == 2 ? content : "",
		time: new Date().getTime(),
		avator: utils.getImg(fromUser.header)
	}
	return msg;
}

/**
 * 设置缓存
 */
function setMsgCache(uid, fid, msg){
	var msgArray = uni.getStorageSync("cachemsg_" + uid + "_" + fid);
	if(!msgArray){
		msgArray = [];
	}
	msgArray.push(msg);
	uni.setStorageSync("cachemsg_" + uid + "_" + fid, msgArray);
}

/**
 * 获取缓存
 */
function getMsgCache(uid, fid){
	var msgArray = uni.getStorageSync("cachemsg_" + uid + "_" + fid);
	return msgArray;
}

export {
	conn,
	wsRegister,
	sendWsMsg,
	createShowMsg,
	setMsgCache,
	getMsgCache
}